package cn.demoncat.util.lang;

import cn.demoncat.util.lang.constant.CharsetConstant;
import org.apache.commons.lang3.StringUtils;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;

/**
 * byte工具
 * 
 * @author 延晓磊
 *
 * @since 2019年6月14日
 */
public class ByteUtil {
	
	/**
	 * bytes 转 chars
	 * 
	 * @param bytes
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年6月14日
	 */
	public static char[] getChars(byte[] bytes) {
		if (bytes == null || bytes.length == 0) {
			return new char[0];
		}
		ByteBuffer bb = ByteBuffer.allocate(bytes.length);
		bb.put(bytes);
		bb.flip();
		CharBuffer cb = CharsetConstant.UTF8_CHARSET.decode(bb);
		return cb.array();
	}
	
	/**
	 * 判断为空或0
	 * 
	 * @param o
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年1月16日
	 */
	public static boolean isEmpty(Byte o) {
		return o == null || o == 0;
	}

	/**
	 * null转0
	 * 
	 * @param o
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2018年6月5日
	 */
	public static Byte toEmpty(Byte o) {
		return o == null ? 0 : o;
	}

	/**
	 * 转换字符串为Byte
	 *
	 * @param num
	 * @param def	默认值
	 * @return 如果字符串为空则返回def，如果字符串非数值则异常
	 *
	 * @author 延晓磊
	 *
	 * @since 2017年1月5日
	 */
	public static Byte valueOf(String num, Byte def) {
		num = StringUtils.trimToNull(num);
		// 如果为空，返回def
		if (StringUtil.isBlank(num)) {
			return def;
		}
		// 非空转换，格式错误抛异常
		return Byte.valueOf(num);
	}

	/**
	 * 转换字符串为Byte
	 *
	 * @param num
	 * @return 如果字符串为空则返回null，如果字符串非数值则异常
	 *
	 * @author 延晓磊
	 *
	 * @since 2017年1月5日
	 */
	public static Byte valueOf(String num) {
		return valueOf(num, null);
	}

	/**
	 * 转换字符串为Byte
	 *
	 * @param num
	 * @return 如果字符串为空则返回0，如果字符串非数值则异常
	 *
	 * @author 延晓磊
	 *
	 * @since 2017年1月5日
	 */
	public static Byte valueOfZero(String num) {
		return valueOf(num, (byte) 0);
	}

	/**
	 * int转byte
	 *
	 * @param intValue int值
	 *
	 * @return byte值
	 */
	public static byte valueOf(int intValue) {
		return (byte) intValue;
	}


}
